﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main2()
{
	//课堂练习1.多个字符从两端移动，向中间汇聚
	//strlen统计的是\0之前字符的个数
	//char arr[] = "abc";//长度是3，减去1就是对应元素的下标
	//        a b c \0
	//对应下标0 1 2  3 

	//数组里放的是[hello bit!!!!!!\0]
	//对应的下标   0
	char arr1[] = { "hello bit!!!!!!" };
	char arr2[] = { "###############" };
	int left = 0;
	int right = strlen(arr1) - 1;
	for (int i = 0; i <= (strlen(arr1) - 1) / 2; i++)
	{
		//把hello……的第一个赋给##……的第一个值
		arr2[i] = arr1[left];
		arr2[right] = arr1[right];
		left++;
		right--;
		printf("%s\n", arr2);
	}
	return 0;
}
#include <windows.h>
#include <stdlib.h>
int main3()
{
	//练习1：法二
	char arr1[] = { "hello bit!!!!!!" };
	char arr2[] = { "###############" };
	int left = 0;
	//strlen统计（\0）之前字符的个数
	int right = strlen(arr1) - 1;
	while (left <= right)
	{
		arr2[right] = arr1[right];
		arr2[left] = arr1[left];
		printf("%s\n", arr2);
		Sleep(1000);//休眠1000毫秒，只能在windows下使用
		system("cls");//清理控制台屏幕的信息
		//效果，一行字符串，逐渐显现中间
		right--;
		left++;
	}
	printf("%s\n", arr2);

	return 0;
}

//二分查找
//在⼀个升序的数组中查找指定的数字n，很容易想到的⽅法就是遍历数组
// ，但是这种⽅法效率⽐较低
//⽐如我买了⼀双鞋，你好奇问我多少钱，我说不超过300元。你还是好奇，你想知道到底多少，我就让
//你猜，你会怎么猜？你会1，2，3，4...这样猜吗？显然很慢；⼀般你都会猜中间数字，⽐如：150，然
//后看⼤了还是⼩了，这就是⼆分查找，也叫折半查找。
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int k = 0;
	scanf("%d", &k);//输入要查找的值，从中间开始查找
	//先找出中间元素
	int sz = sizeof(arr) / sizeof(arr[0]);

	int left = 0;
	int right = sz-1;

	int flag = 1;
	while (left <= right)//不能用while(1)因为找不到就会死循环
	{
		int mid = (left + right) / 2;
		if (k > arr[mid])
		{
			left = arr[mid] + 1;
			right = sz - 1;
		}
		else if (k < arr[mid])
		{
			right = arr[mid] - 1;

		}
		else// k == arr[mid]
		{
			printf("已查找到，该值为%d,其下标为%d", arr[mid],mid);
			flag = -1;
            break;

		}
	}
	if (flag == 1)//left > right
	{
		printf("找不到该数");
	}

	
	return 0;
}